import request from "@/utils/request";

const CATEGORY_BASE_URL = "/business/materialCategory";

const MaterialCategoryAPI = {
  /**
   * 获取定额分类列表
   *
   * @param queryParams 查询参数（可选）
   * @returns 定额分类树形表格数据
   */
  getList(queryParams?: MaterialCategoryQuery) {
    return request<any, MaterialCategoryVO[]>({
      url: `${CATEGORY_BASE_URL}/loadTree`,
      method: "get",
      params: queryParams,
    });
  },

  /** 获取定额分类下拉列表 */
  getOptions() {
    return request<any, OptionType[]>({
      url: `${CATEGORY_BASE_URL}/loadTree`,
      method: "get",
    });
  },

  /**
   * 获取定额分类表单数据
   *
   * @param id 定额分类ID
   * @returns 定额分类表单数据
   */
  getFormData(id: string) {
    return request<any, MaterialCategoryForm>({
      url: `${CATEGORY_BASE_URL}/load/${id}`,
      method: "get",
    });
  },

  /**
   * 新增定额分类
   *
   * @param data 定额分类表单数据
   * @returns 请求结果
   */
  create(data: MaterialCategoryForm) {
    return request({
      url: `${CATEGORY_BASE_URL}/add`,
      method: "post",
      data,
    });
  },

  /**
   * 修改定额分类
   *
   * @param id 定额分类ID
   * @param data 定额分类表单数据
   * @returns 请求结果
   */
  update(data: MaterialCategoryForm) {
    return request({
      url: `${CATEGORY_BASE_URL}/update`,
      method: "post",
      data,
    });
  },

  /**
   * 删除定额分类
   *
   * @param id 定额分类ID
   * @returns 请求结果
   */
  deleteById(id: string) {
    return request({
      url: `${CATEGORY_BASE_URL}/delete/${id}`,
      method: "get",
    });
  },
};

export default MaterialCategoryAPI;

/** 定额分类查询参数 */
export interface MaterialCategoryQuery {
  /** 搜索关键字 */
  keywords?: string;
  /** 状态 */
  status?: boolean;
}

/** 定额分类类型 */
export interface MaterialCategoryVO {
  /** 子定额分类 */
  children?: MaterialCategoryVO[];
  /** 定额分类ID */
  id?: string;
  /** 定额分类名称 */
  name?: string;
  /** 定额分类编号 */
  code?: string;
  /** 父定额分类ID */
  parentId?: string;
  /** 排序 */
  sort?: number;
  /** 状态(1:启用；0:禁用) */
  status?: boolean;
}

/** 定额分类表单类型 */
export interface MaterialCategoryForm {
  /** 定额分类ID(新增不填) */
  id?: string;
  /** 定额分类名称 */
  name?: string;
  /** 定额分类编号 */
  code?: string;
  /** 父定额分类ID */
  parentId: string;
  /** 排序 */
  sort?: number;
  /** 状态(1:启用；0：禁用) */
  status?: boolean;
}
